package platzerworld.kegeln.gui.ergebnis;

import java.util.ArrayList;
import java.util.List;

import platzerworld.kegeln.R;
import platzerworld.kegeln.common.ConstantsIF;
import platzerworld.kegeln.common.KeyValueVO;
import platzerworld.kegeln.common.logging.LOG;
import platzerworld.kegeln.common.preference.KegelverwaltungPreference;
import platzerworld.kegeln.common.style.StyleManager;
import platzerworld.kegeln.db.klasse.KlasseSpeicher;
import platzerworld.kegeln.db.mannschaft.MannschaftSpeicher;
import platzerworld.kegeln.db.spieler.SpielerSpeicher;
import platzerworld.kegeln.gui.LigaVerwalten;
import platzerworld.kegeln.vo.klasse.KlasseVO;
import platzerworld.kegeln.vo.mannschaft.MannschaftVO;
import platzerworld.kegeln.vo.spieler.SpielerVO;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Suchen eines Ergebnisses.
 * 
 * @author platzerg
 * 
 */
public class ErgebnisSuchen extends Activity implements ConstantsIF{

	private static final long serialVersionUID = 1L;

	/** Kuerzel fuers Logging. */
	private static final String TAG = ErgebnisSuchen.class.getSimpleName();
	
	private TextView titeltext;
	
	private Button mSuchenButton;
	private Button mAbbruchButton;
	
	private EditText edtPassnr;
	private EditText edtName;
	private EditText edtVorname;
	
	static Spinner mKlassenSpinner = null;
	static Spinner mMannschaftSpinner = null;
	private int mSelectedKlasseItemPosition=0;
	private int mSelectedMannschaftItemPosition=0;
	private MannschaftVO selectedMannschaftVO = null;
	private KlasseVO selectedKlasseVO = null;

	private KlasseSpeicher mKlasseSpeicher;
	private MannschaftSpeicher mMannschaftSpeicher;
	private SpielerSpeicher mSpielerSpeicher;
	
	private SpielerVO mSpielerVO;
	private SpielerVO mSpielerSearchVO;

	@Override
	protected void onCreate(Bundle icicle) {
		super.onCreate(icicle);
		LOG.v(TAG, "onCreate(): entered...");
		setContentView(R.layout.ergebnis_suchen);
		mSpielerVO = new SpielerVO(0, "", "");
		mSpielerSearchVO = new SpielerVO(0, "", "");
		
		
		init();
	}
	
	@Override
	protected void onStart() {
		zeigeKlassen();
		super.onStart();
	}
	
	@Override
	protected void onDestroy() {
		cleanDatabase();
		super.onDestroy();
	}
	
	@Override
	protected void onResume() {
		// loadPreference();
		mKlassenSpinner.setSelection(mSelectedKlasseItemPosition);
		super.onResume();
	}
	
	@Override
	protected void onPause() {
		LOG.v(TAG, "onPause(): entered...");
		// savePreference();
		super.onPause();
	}

	private void init(){
		initWidgets();
		bindWidgets();
		initStyle();
		initListener();
		initContextMenu();
		initDatabase();
	}
	
	private void bindWidgets(){
		edtPassnr.setText("");
		edtName.setText(mSpielerSearchVO.name);
		edtVorname.setText(mSpielerSearchVO.vorname);
		
		titeltext.setText(getResources().getString(R.string.txt_ergebnis_suchen_titel));
		
	}
	
	private void initStyle() {
		Typeface font = StyleManager.getInstance().init(this).getTypeface();
		titeltext.setTypeface(font);
	}
	
	private void initWidgets(){
		titeltext = (TextView) findViewById(R.id.txt_ergebnis_suchen_titel);
		
		mSuchenButton = (Button) findViewById(R.id.sf_ergebnis_suchen_suchen);
		mAbbruchButton = (Button) findViewById(R.id.sf_ergebnis_suchen_abbruch);
		
		edtPassnr = (EditText) findViewById(R.id.edt_ergebnis_suchen_passnr);
		edtName = (EditText) findViewById(R.id.edt_ergebnis_suchen_name);
		edtVorname = (EditText) findViewById(R.id.edt_ergebnis_suchen_vorname);
		
		mKlassenSpinner = (Spinner) this.findViewById(R.id.sp_ergebnis_suchen_klassen);
		mMannschaftSpinner = (Spinner) this.findViewById(R.id.sp_ergebnis_suchen_mannschaften);
	}
	
	private void initListener(){		
		mSuchenButton.setOnClickListener(mErgebnisSuchenListener);
		mAbbruchButton.setOnClickListener(mErgebnisSuchenAbbruchListener);
		
		mKlassenSpinner.setOnItemSelectedListener(mSpinnerKlassenItemAuswahlListener);
		mMannschaftSpinner.setOnItemSelectedListener(mSpinnerMansnchaftenItemAuswahlListener);
	}
	
	private void initContextMenu(){
	}
	
	private void initDatabase(){
		mKlasseSpeicher = new KlasseSpeicher(this);
	}
	
	private void cleanDatabase(){
		if(null != mKlasseSpeicher){
			mKlasseSpeicher.schliessen();
		}
		if(null != mMannschaftSpeicher){
			mMannschaftSpeicher.schliessen();
		}
		if(null != mSpielerSpeicher){
			mSpielerSpeicher.schliessen();
		}
	}
	
	private OnClickListener mErgebnisSuchenListener = new OnClickListener() {
	    public void onClick(View v) {	    	
	      suchen();
	    }
	};
	
	private OnClickListener mErgebnisSuchenAbbruchListener = new OnClickListener() {
	    public void onClick(View v) {
	       finish();
	    }
	};
	
	private void suchen(){
		ArrayList<SpielerVO> spielerVOs = null;
		if(validate()){			
			mSpielerSpeicher = new SpielerSpeicher(this);
			
			spielerVOs= mSpielerSpeicher.ladeSpielerBySuchkriterium(null, mSpielerSearchVO);
			
			if(spielerVOs.size() == 0){
				mSpielerVO = null;
			}else if(spielerVOs.size() == 1){
				mSpielerVO = spielerVOs.get(0);
			}else{
				mSpielerVO = null;
				Toast.makeText(this, "Es wurden mehrere Spieler gefunden!", Toast.LENGTH_SHORT).show();
			}
			
			
			
			if(null != mSpielerVO){
				final Intent ergebnisseAnzeigenIntent = new Intent(this, ErgebnisseAnzeigen.class);
				ergebnisseAnzeigenIntent.putExtra(INTENT_EXTRA_SPIELER, mSpielerVO);
				startActivity(ergebnisseAnzeigenIntent);
			}else{
				Toast.makeText(this, "Es konnte leider kein Spieler ermittelt werden!", Toast.LENGTH_SHORT).show();
			}
		}else {
			Toast.makeText(this, "Passnr oder Name oder Vorname muessen angegeben werden", Toast.LENGTH_SHORT).show();
		}
	}

	@Override
	public void finish() {
		Intent data = new Intent();
		data.putExtra(INTENT_EXTRA_NEUER_SPIELER, mSpielerVO);
		setResult(RESULT_OK, data);
		super.finish();
	}
	
	private boolean validate(){
		boolean valide = false;
		if(edtPassnr.getText().length() > 0){
			mSpielerSearchVO.passNr = Long.parseLong(edtPassnr.getText().toString());
			valide = true;
		}else{
			mSpielerSearchVO.passNr = -1;
		}
		
		if(edtName.getText().length() > 0){
			mSpielerSearchVO.name = edtName.getText().toString();
			valide = true;
		}else{
			mSpielerSearchVO.name = "";
		}
		
		if( edtVorname.getText().length() > 0){
			mSpielerSearchVO.vorname = edtVorname.getText().toString();
			valide = true;
		}else{
			mSpielerSearchVO.vorname = "";
		}
		
		if(null != selectedMannschaftVO && selectedMannschaftVO.key > 0){
			mSpielerSearchVO.mannschaftId = selectedMannschaftVO.key;
		}else{
			mSpielerSearchVO.mannschaftId = -1;
		}
		
		return valide;
	}
	
	private void zeigeKlassen() {
		List<KlasseVO> klassenListeVO = mKlasseSpeicher.ladeAlleKlassenListeVO();
		klassenListeVO.add(0, new KlasseVO(-1, "", "", ""));
		ArrayAdapter<KlasseVO> klassenAdapter = new ArrayAdapter<KlasseVO>( this, android.R.layout.simple_spinner_item, klassenListeVO);
		mKlassenSpinner.setAdapter(klassenAdapter);
		klassenAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
	}
	
	private final AdapterView.OnItemSelectedListener mSpinnerKlassenItemAuswahlListener = new AdapterView.OnItemSelectedListener() {
		public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
			mSelectedKlasseItemPosition = position;
			selectedKlasseVO = (KlasseVO) mKlassenSpinner.getSelectedItem();
			mMannschaftSpeicher = new MannschaftSpeicher(ErgebnisSuchen.this);
			zeigeMannschaftenZurKlasseId(selectedKlasseVO.key);
			
			if(mSelectedMannschaftItemPosition <= mMannschaftSpinner.getAdapter().getCount()){
				mMannschaftSpinner.setSelection(mSelectedMannschaftItemPosition);
			}else{
				mMannschaftSpinner.setSelection(0);
			}
		}

		public void onNothingSelected(AdapterView<?> arg0) {
		}
	};
	
	private final AdapterView.OnItemSelectedListener mSpinnerMansnchaftenItemAuswahlListener = new AdapterView.OnItemSelectedListener() {
		public void onItemSelected(AdapterView<?> arg0, View arg1, int position, long id) {
			mSelectedMannschaftItemPosition = position;
			mSpielerSpeicher = new SpielerSpeicher(ErgebnisSuchen.this);
			selectedMannschaftVO = (MannschaftVO) mMannschaftSpinner.getSelectedItem();
		}
		public void onNothingSelected(AdapterView<?> arg0) {

		}
	};
	
	private void zeigeMannschaftenZurKlasseId(long klasseId) {
		List<MannschaftVO> mannschaftenListeVO = null;
		
		if(klasseId >= 0){
			mannschaftenListeVO = mMannschaftSpeicher.ladeAlleMannschaftenVoZurKlasseListeVO(klasseId);
		}else{
			mannschaftenListeVO = mMannschaftSpeicher.ladeAlleMannschaftenListeVO();
		}
		
		
		mannschaftenListeVO.add(0, new MannschaftVO(-1, -1, -1, ""));
		
		ArrayAdapter<MannschaftVO> mannschaftenAdapter = new ArrayAdapter<MannschaftVO>(this, android.R.layout.simple_spinner_item, mannschaftenListeVO);
		mannschaftenAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
		mMannschaftSpinner.setAdapter(mannschaftenAdapter);
	}
	
	private void savePreference() {
		KegelverwaltungPreference.getInstance(this).saveIntState(PREFERENCE_KEY_INDEX_KLASSE_SEARCH, mSelectedKlasseItemPosition).saveIntState(PREFERENCE_KEY_INDEX_MANNSCHAFT_SEARCH, mSelectedMannschaftItemPosition);
		
	}

	private void loadPreference(){
		SharedPreferences mySharedPreferences = getPrivateSharedPreferences();
		int klassePos = mySharedPreferences.getInt(PREFERENCE_KEY_INDEX_KLASSE_SEARCH, 0);
		int mannschaftPos = mySharedPreferences.getInt(PREFERENCE_KEY_INDEX_MANNSCHAFT_SEARCH, 0);
		mSelectedKlasseItemPosition = klassePos;
		mSelectedMannschaftItemPosition = mannschaftPos;
	}
	
	private SharedPreferences getPrivateSharedPreferences(){
		return getSharedPreferences("KegelVerwaltungPrefs", Activity.MODE_PRIVATE);
	}
}
